Appearance
php是一个弱类型 脚本语言 用于web应用开发
php的语法和JavaScript非常接近 php的语句结尾必须使用 ; 表示结束,没有则报错
概念
后端渲染
访问网站时通过web服务器进行访问(apache)
web服务器会找到相应后端语言的编译工具 对用户的请求内容进行编译(php java虚拟机)
编译 指的是将 编程语言的代码通过工具 变成 浏览器能识别的代码 (html)
使用后端语言开发的网站叫做动态网站 (页面的数据是实时生成的)
因此服务器可以直接把PHP代码转换成HTML代码
使用
基本逻辑
搭建PHP框架
边界符
表示在之间的内容是php代码
header响应头设置
表示声明给浏览器 内容的类型
("content-type:text/html;charset=utf-8") 类型是html,字符编码为UTF-8
例子
<?php
header("content-type:text/html;charset=utf-8");
?>
注:json类型的响应头写法为"application/json";
引用外部PHP文件
include(路径)
基本语法
变量
PHP的变量不需要声明,可以直接使用或赋值,字符前加 ' $ ' 符号,表示变量。
$name
常量
通过define的函数进行声明,开发约定常量名必须大写
define('常量名','常量值')函数
PHP的函数使用方法与JS相同,设置形参时需要在形参前加 ' $ ' 符号。
function( $name ){语句}
字符串
PHP中可以使用单引号 ' ' 或双引号 " " 表示字符串
单引号字符串使用 . 点操作符拼接变量;双引号字符串可以直接识别变量名
'你好'.$name
"你好$name"
数组
php中数组的书写格式与JS不同,为关键字array加小括号
php中的数组分为,索引数组和关联数组两种
索引数组有序排列,类似JS的数组;关联数组是哈希结构,类似JS的对象
变量 = array(成员1,成员2,...成员N) 索引数组
变量 = array('键'=>'值','键'=>'值') 关联数组
引用对象属性
php引用对象使用 ’ -> ‘ ,类似于JS中的' . '
对象->属性
拼接符
php的拼接符是 ’ . ‘ ,类似于JS中的' + '
元素.元素
基本输出语句
echo 直接输出
echo输出的文字可以直接拼接在DOM内
echo 输出内容
print_r() 输出数组
print_r(输出数组)
gettype() 检测类型
整数数字integer ;小数数字double;字符串string;布尔boolean;数组array;对象(类)object;未定义NULL;资源resource
echo gettype(被检测项) 输出被检测项的类型var_dump() 检测并输出
用于检测数据类型并输出结果
var_dump(输出内容)基本数据类型
null未赋值
int整数
float小数(浮点)
bool布尔
string字符串
流程控制
php的流程控制中的if-else、switch-case、for循环、while循环、do-while循环,与JS用法相同
foreach循环
语法类似于JS中的for-of
遍历数组中的值
foreach(数组 as 变量){
echo 变量;
}
函数
数组操作
count()数组长度
PHP中的数组没有length属性,可使用count方法代替
count(数组)
sort()升序排序
返回值,布尔值 是否排序成功
sort(数组,新成员)
rsort()降序排序
返回值,布尔值 是否排序成功
rsort(数组,新成员)
array_push()尾部添加
在数组尾部添加成员,用于索引数组
返回值,数组新长度
array_push(数组,新成员)
array_merge()合并数组
将两个数组合并,用于关联数组,类似于JS中的assign对象合并
返回值,新数组
array_merge(目标数组,补充对象)
array_filter()筛选
返回值,筛选后的数组
array_filter(数组,function(参数){return 筛选条件})
json操作
json_encode()编码json
对对象进行 JSON 编码
返回值,JSON 编码的 string
array_filter(对象)
注: 编码失败时返回false
json_decode()解码json
接受一个 JSON 编码的字符串并且把它转换为 PHP 对象
返回值,在json中编码的数据
array_filter(JSON字符串)
注: 布尔值和null会直接返回;解码失败或超过递归限制时,返回null
表单请求操作
GET 接收数据
用于接收前端发送的http请求的 GET 数据
POST 接收数据
用于接收前端发送的http请求的 POST 数据
$_REQUEST[ ]接收数据
用于接收前端发送的http请求的 GET 或 POST 数据
$变量 = $_REQUEST['表单标签的name值']
GET和POST的区别
1. GET请求的数据会出现在地址栏(search)中 POST不显示
2. GET请求的数据量比POST小很多
3. POST请求速度比GET要慢
4. GET请求和POST请求的数据 在不同的位置发送
GET请求的数据 随请求头发送(显示在search)中
POST请求的数据 随请求体发送
其他操作
include()引入外部文件
include(路径)
strip_tags()剥除html标签
strip_tags(需要剥去标签的数据)
strip_tags($_REQUEST['表单name']) 表单数据接收时剥除标签isset()判断是否存在
一般用于判断是否获得get/post数据,返回布尔值
isset($_post['name']) 判断是否获得name的post请求die()结束进程
die()表示结束当前进程,并输出内容,默认不输出
die('进程结束')
注: 不输出内容时,括号可以省略
file_get_contents()接收数据
将内容转换成字符串,可用于解决同源策略获取数据,也可用于转换json字符串
file_get_contents(文件路径) 将文件转换成字符串
file_get_contents('php://input') 将提交的json代码转换成字符串
应用-接收json字符串,并转换
json数据 = file_get_contents('php://input') 接收json字符串
json对象 = json_decode(json数据) 将json字符串编译成json对象
字段值 = json对象->字段名 从json对象中,用字段名提取字段名
引用类型
mysqli()创建连接
mysqli是一个构造函数,代表PHP和Mysql数据库之间的创建一个连接
mysqli的属性和方法,使用前需要完成和MySQL的链接
实例 = new mysqli(主机名,用户名,密码);
select_db()选择数据库
mysqli实例->select_db('数据库')
query()执行SQL语句
用于执行SQL语句或设置查询字符编码
关键字
fetch_assoc()展开一个结果集的结果
mysqli实例->query('set names utf8'); 设置查询字符的编码格式
mysqli实例->query('SQL语句'); 执行SQL语句。返回值:结果集
获得结果集(展开一个)
结果集 = mysqli实例->query('SQL语句'); 获得结果集
结果集->fetch_assoc(); 展开一个结果
var_dump(结果集->fetch_assoc()); 打印这个结果
获得结果集(全部)
数组 = array(); 设置空数组,用来存放结果
while(结果=结果集->fetch_assoc()){ 循环条件,结果的布尔值 结果为对象时值为ture,结果为null时值为false
array_push(数组,结果); 将此次循环结果加入数组
}
print_r(数组) 打印所有结果
注: 选择数据库前先设置查询字符的格式
num_rows结果集行数
是结果集的属性,返回值,行数
结果集行数 = mysqli实例->query('SQL语句')->num_rows
close()断开连接
数据库交互结束后必须断开连接,避免造成浪费大量运行内存
mysqli实例 = close();
同源策略
出于保护数据的请求安全,一个页面无法访问跨源数据。
ajax请求就是遵循同源策略的
判断同源的条件
1.相同的地址(主机名/ip/域名) 2.相同的协议 3.相同的端口
注:同一个ip,使用域名和ip两种方式,也属于跨域
跨源访问的方式
JSONP前端跨源
原理
JSONP采用了src属性是不受同源策略影响的特性(例:图片、js文件都可以跨源访问)
JSONP利用了script元素可以直接执行JS代码,并且不受同源策略影响的特点,向服务器发送get请求,将**数据拼接在search部分
步骤
创建script元素,并利用其特性向服务器发送请求,通过回调函数得到返回数据,最后处理这个数据
let script = document.createElement('script'); 动态创建script元素
script.src="url?name=value&name=value"; 添加script元素的src属性,并写入提交信息与回调函数
document.body.appendChild(script); 将script元素放入页面
function fn(data){} 设置回调函数,处理返回的信息
XHR2后端开权限
XHR2(CORS)后端开放跨域访问权限
在PHP里设置请求头,让ajax实现跨域(这个方法不安全)
header('Access-Control-Allow-Origin:*') 给所有人开放
反向代理
使用最多 使用web服务器对请求数据进行转发实现跨域